def fit(now: int, flag: int) -> bool:
    # 是否是在硬质土上
    return (now | flag) == flag

def ok(now: int) -> bool:
    # 这一行的机器是否间隔够2个格。 	
    return not (now & (now >> 1) or now & (now >> 2))

def not_intersect(now: int, prev: int) -> bool:
    # 判断两行之间是否有在同一列的。 
    return not (now & prev)
	
def count(now: int) -> int:
    return bin(now).count('1')

n, m = map(int, input().split())
t = [0] * (n + 2)
dp = [[[0] * (1 << m) for j in range(1 << m)] for i in [1, 2]]
for i in range(2, n + 2):
    # 把每行都转成二进制，再转成十进制，存入t中。
    t[i] = int("".join(map(lambda x: '1' if x == 'P' else '0', input())), 2)
rgm = [i for i in range(1 << m)]
rg = []
for i in range(n + 2):
    rg.append(list(filter(lambda x: fit(x, t[i]) and ok(x), rgm)))
for i in range(2, n + 2):
    for j in rg[i]:
        cnt = count(j)
        for k in rg[i - 1]:
            if not_intersect(j, k):
                for l in rg[i - 2]:
                    if not_intersect(j, l) and not_intersect(k, l):
                        dp[i % 2][j][k] = max(dp[i % 2][j][k], dp[(i - 1) % 2][k][l] + cnt)
mx = 0
for i in dp[(n + 1) % 2]:
    for j in i:
        mx = max(mx, j)
print(mx)
# 那么，还是超时叻
# -------------------------------------------------------------------------------

# 比赛环境为python3.8.6版本自带的IDLE，最好早点熟悉一下。。这个东西的提示时有时无

# 菜单栏最右边的Help的Python Docs 比赛时候也可以看，不过建议还是提前多了解了解，

# 比赛的时候至少知道在文档找什么能用的上。

# IDLE是下载Python时自带的，在按住win+s搜索IDLE就能搜到了。

# 然后点左上角的File可以创建新文件，然后按F5可以运行。
